﻿using System;
using System.Text;
using System.Windows.Forms;
using System.Data;
using MySql.Data.MySqlClient;
using System.IO;
using GeradorPHP.Classes;


namespace GeradorPHP
{

    public partial class Form1 : Form
    {      
     
       // GeraArquivos Gerador = new GeraArquivos();
        Constantes constantes = new Constantes();        
        private MySqlConnection bdConn;
        private DataSet bdDataSet; 
        StringBuilder sb = new StringBuilder();
        string resultado;
        public bool sts_verifica_registro_existente;
        
        public Form1()
        {         
            InitializeComponent();
            groupBox2.Visible = false;
            this.toolStripProgressBar1.Visible = true;
            btn_gerar.Visible = false;            
            txt_caminho.Text = constantes.Caminho_Projeto;
        }
              
        private void ValidarInformacoes()
        {
 	        if ((txt_banco.Text =="") || (txt_caminho.Text =="")|| (txt_host.Text =="")|| (txt_usuario.Text =="")) 
            {
                MessageBox.Show("Preencha todos os campos");
                return;                              
            }
        }

        private void GeraArquivos()
        {
            // cria o arquivo de configuração para conexão
           if (chk_altera_config.Checked)
               CriaArquivo(txt_caminho.Text + @"\admin\config.php", MontaArquivoConfig(txt_host.Text, txt_banco.Text, txt_usuario.Text, txt_senha.Text));
            
           this.toolStripProgressBar1.Visible = true;
           this.toolStripProgressBar1.Minimum = 0;          
           this.toolStripProgressBar1.Step = 1;
           
           // Determine if there are any items checked.
           if (checkedListBox1.CheckedItems.Count != 0)
           {
               this.toolStripProgressBar1.Maximum = checkedListBox1.CheckedItems.Count - 1;

               for (int x = 0; x <= checkedListBox1.CheckedItems.Count - 1; x++)
               {
                   // cria os diretórios caso não existam          
                   if (!System.IO.Directory.Exists(txt_caminho.Text + @"\admin\views\" + checkedListBox1.CheckedItems[x].ToString()))
                       System.IO.Directory.CreateDirectory(txt_caminho.Text + @"\admin\views\" + checkedListBox1.CheckedItems[x].ToString());
                   
                   if (!System.IO.Directory.Exists(txt_caminho.Text + @"\admin\models\"))
                       System.IO.Directory.CreateDirectory(txt_caminho.Text + @"\admin\models\");
                   
                   CriaArquivo(txt_caminho.Text + @"\admin\models\"+checkedListBox1.CheckedItems[x].ToString()+".php", MontaModel(checkedListBox1.CheckedItems[x].ToString()));
                   CriaArquivo(txt_caminho.Text + @"\admin\views\"+ checkedListBox1.CheckedItems[x].ToString()+@"\add.php", MontaViewAdd(checkedListBox1.CheckedItems[x].ToString()));
                   CriaArquivo(txt_caminho.Text + @"\admin\views\"+ checkedListBox1.CheckedItems[x].ToString()+@"\default.php", MontaViewDefault(checkedListBox1.CheckedItems[x].ToString()));
                   CriaArquivo(txt_caminho.Text + @"\admin\views\"+ checkedListBox1.CheckedItems[x].ToString()+@"\edit.php", MontaViewEdit(checkedListBox1.CheckedItems[x].ToString()));
                   CriaArquivo(txt_caminho.Text + @"\admin\views\"+ checkedListBox1.CheckedItems[x].ToString()+@"\index.php", MontaViewIndex(checkedListBox1.CheckedItems[x].ToString()));
                   CriaArquivo(txt_caminho.Text + @"\admin\views\" + checkedListBox1.CheckedItems[x].ToString() + @"\view.php", MontaViewView(checkedListBox1.CheckedItems[x].ToString()));
                   
                   //
                   if (chk_menu.Checked )
                       CriaMenu(checkedListBox1.CheckedItems[x].ToString());
                   
                   // toolbar barra de progresso
                   this.toolStripProgressBar1.PerformStep();                   
               }
           }
           this.toolStripProgressBar1.Visible = false;
           toolStripStatusLabel1.Text = "Processo Concluído!";
           MessageBox.Show("Processo Concluído!"); 
        }

        private void CriaMenu(string tabela)
        {
            string sql;        
            DataTable MyDT = new DataTable();
            DataTable MyDT1 = new DataTable();
            DataTable MyDT2 = new DataTable();
            System.Globalization.CultureInfo cultureinfo = System.Threading.Thread.CurrentThread.CurrentCulture; 

            sql=" select 1 from menus where url = '" + tabela + "';";
            MySqlDataAdapter myDA = new MySqlDataAdapter(sql, bdConn);
            
            myDA.Fill(MyDT);
            myDA.Update(MyDT);

            //SELECT column_name , column_comment FROM information_schema.columns WHERE table_name = 'tabela1' mostra a coluna e o comentário dela
            //SELECT table_comment FROM information_schema.tables WHERE table_name = 'tabela1' mostra o comentário da tabela


            if (MyDT.Rows.Count == 0)
            {     
                  sql="select max(posicao)+1 as posicao from menus;";
                  MySqlDataAdapter adapter = new MySqlDataAdapter(sql, bdConn);                
                  adapter.Fill(MyDT1);
                  adapter.Update(MyDT1);
                  if (MyDT1.Rows.Count > 0)
                  {
                      sql = "SELECT table_comment FROM information_schema.tables WHERE table_name = '" + tabela + "'";
                      MySqlDataAdapter adapter2 = new MySqlDataAdapter(sql, bdConn);
                      adapter2.Fill(MyDT2);
                      adapter2.Update(MyDT2);

                      MySqlCommand comm = bdConn.CreateCommand();
                      comm.CommandText = "INSERT INTO menus(menu_id,posicao,descricao,url,iconCls,menuPainel) VALUES(@menu_id, @posicao,@descricao,@url,@iconCls,@menuPainel)";
                      comm.Parameters.AddWithValue("@menu_id", "5");
                      comm.Parameters.AddWithValue("@posicao", MyDT1.Rows[0].ItemArray[0]);
                      comm.Parameters.AddWithValue("@descricao", MyDT2.Rows[0].ItemArray[0].ToString() != ""? MyDT2.Rows[0].ItemArray[0]:cultureinfo.TextInfo.ToTitleCase(tabela));
                      comm.Parameters.AddWithValue("@url", tabela);
                      comm.Parameters.AddWithValue("@iconCls", "nav");
                      comm.Parameters.AddWithValue("@menuPainel", "1");
                      comm.ExecuteNonQuery();
                      bdConn.Close();
                  }
            }
            myDA.Dispose();
            MyDT1.Dispose();
            MyDT2.Dispose();

        }        

        private void CriaArquivo(string arquivo, string conteudo)
        {
            string path = arquivo;

            try
            {
                // Delete the file if it exists.
                if (File.Exists(path))
                {
                    // Note that no lock is put on the
                    // file and the possibility exists
                    // that another process could do
                    // something with it between
                    // the calls to Exists and Delete.
                    File.Delete(path);
                }

                // Create the file.
                using (FileStream fs = File.Create(path))
                {
                    Byte[] info = new UTF8Encoding(true).GetBytes(conteudo);
                    // Add some information to the file.
                    fs.Write(info, 0, info.Length);
                }

                // Open the stream and read it back.
                using (StreamReader sr = File.OpenText(path))
                {
                    string s = "";
                    while ((s = sr.ReadLine()) != null)
                    {  
                        statusStrip1.Text = (s).ToString();
                    }
                }
            }

            catch (Exception Ex)
            {  
                toolStripStatusLabel1.Text = Ex.ToString();
                MessageBox.Show(Ex.ToString());
            }
        }
              
        private void button1_Click(object sender, EventArgs e)
        {
            if (chk_estrutura_basica.Checked)
                CopiaEstruturaBasica(Application.StartupPath + @"\admin", txt_caminho.Text + @"\admin", true);                
            
            if (checkedListBox1.CheckedItems.Count == 0)
                MessageBox.Show("Você precisa selecionar pelo menos uma tabela!","Atenção",MessageBoxButtons.OK,MessageBoxIcon.Information);                
            else
                GeraArquivos();
        }

        private static void CopiaEstruturaBasica(string sourceDirName, string destDirName, bool copySubDirs)
        {
            var dir = new DirectoryInfo(sourceDirName);
            var dirs = dir.GetDirectories();

            // If the source directory does not exist, throw an exception.
            if (!dir.Exists)
            {
                throw new DirectoryNotFoundException(
                    "Pasta de origem não encontrada: "
                    + sourceDirName);
            }
            // Se o diretório não existir no destino, ele será criado.
            if (!Directory.Exists(destDirName))
                Directory.CreateDirectory(destDirName);

            // Get the file contents of the directory to copy.
            var files = dir.GetFiles();

            foreach (var file in files)
            {
                // Create the path to the new copy of the file.
                var temppath = Path.Combine(destDirName, file.Name);

                // Copy the file.
                file.CopyTo(temppath, true);
            }

            // If copySubDirs is true, copy the subdirectories.
            if (!copySubDirs) return;

            foreach (var subdir in dirs)
            {
                // Create the subdirectory.
                var temppath = Path.Combine(destDirName, subdir.Name);

                // Copy the subdirectories.
                CopiaEstruturaBasica(subdir.FullName, temppath, copySubDirs);
            }
        }

        private void button2_Click_1(object sender, EventArgs e)
        {
            folderBrowserDialog1.ShowDialog();
            txt_caminho.Text = folderBrowserDialog1.SelectedPath.ToString(); 
        }

        private void checkedListBox1_SelectedIndexChanged(object sender, EventArgs e)
        { 
           //RetornaCamposTabela(checkedListBox1.SelectedItem.ToString());    
            VerificaRelacionamentoTabela(txt_banco.Text, checkedListBox1.SelectedItem.ToString());
        }        

        #region Área para geração dos arquivos

        private void Conectar(string servidor, string banco, string usuario, string senha)
        {
            StringBuilder connstr = new StringBuilder();
            //Definição do dataset
            bdDataSet = new DataSet();
            connstr.Append("Persist Security Info=False;server=");
            connstr.Append(servidor);
            connstr.Append(";database=");
            connstr.Append(banco);
            connstr.Append(";uid=");
            connstr.Append(usuario);
            connstr.Append(";server=");
            connstr.Append(servidor);
            connstr.Append(";database=");
            connstr.Append(banco);
            connstr.Append(";uid=");
            connstr.Append(usuario);
            connstr.Append(";pwd=");
            connstr.Append(senha);

            //Define string de conexão
            bdConn = new MySqlConnection(connstr.ToString());

            //Abre conecção
            try
            {
                bdConn.Open();
                //toolStripStatusLabel1.Text = "Conexão realizada com sucesso!";
                btn_gerar.Visible = true;
                MostraTabelas();
            }
            catch
            {
                MessageBox.Show("Não foi possível estabelecer conexão com o Servidor/Banco", "Atenção!");
                toolStripStatusLabel1.Text = "Não foi possível estabelecer conexão com o Servidor/Banco!";
            }
        }

        private void MostraTabelas()
        {
            checkedListBox1.Items.Clear();
            // Cria o Objeto que ira enviar comandos para o MySQL
            MySqlCommand cmd = bdConn.CreateCommand();

            // Cria o Objeto que ira ler o BD
            MySqlDataReader Reader;

            // Seleciona a tabela do BD que você quer ler
            cmd.CommandText = "show tables FROM " + txt_banco.Text;

            // Lê o BD
            Reader = cmd.ExecuteReader();

            while (Reader.Read())
            {
                for (int i = 0; i < Reader.FieldCount; i++)
                {
                    checkedListBox1.Items.Add(Reader.GetString(i));
                }
            }
            Reader.Close();
        }

        public DataTable VerificaRelacionamentoTabela(string banco, string tabela)
        {
            StringBuilder sql = new StringBuilder();
            DataTable MyDT = new DataTable();

            sql.Append(" SELECT TABLE_NAME AS tabela_filha,   COLUMN_NAME AS coluna_filha,    REFERENCED_TABLE_NAME AS tabela_pai,    REFERENCED_COLUMN_NAME AS chave_estrangeira ");
            sql.Append(" FROM  information_schema.KEY_COLUMN_USAGE");
            sql.Append(" WHERE TABLE_SCHEMA = '" + banco  + "' AND TABLE_NAME = '" + tabela + "' AND REFERENCED_TABLE_NAME IS NOT NULL;");            

            MySqlDataAdapter myDA = new MySqlDataAdapter(sql.ToString(), bdConn);

            myDA.Fill(MyDT);
            myDA.Update(MyDT);
            ////dataGridView1.DataSource= MyDT;
            return MyDT;
        }        

        public string MontaArquivoConfig(string servidor, string banco, string usuario, string senha)
        {
            sb.Clear();
            resultado= string.Empty;

            sb.Append(@"<?php");
            sb.Append(Environment.NewLine);
            sb.Append("$exibir_help = false;");
            sb.Append(Environment.NewLine);
            sb.Append("$PATH_TRANSLATED = (isset($PATH_TRANSLATED) && !empty($PATH_TRANSLATED)) ? $PATH_TRANSLATED : '';");
            sb.Append(Environment.NewLine);
            sb.Append("$HTTP_HOST = (isset($HTTP_HOST) && !empty($HTTP_HOST)) ? $HTTP_HOST : '';");
            sb.Append(Environment.NewLine);
            sb.Append("$PATH_INFO = (isset($PATH_INFO) && !empty($PATH_INFO)) ? $PATH_INFO : '';");
            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);
            sb.Append(@"$root_path = strrev(str_replace( '\\', '/', $PATH_TRANSLATED ));");
            sb.Append(Environment.NewLine);
            sb.Append(@"$root_path = str_replace( '//', '/', strrev(substr($root_path,strpos($root_path,'//'))) );");
            sb.Append(Environment.NewLine);
            sb.Append("$dns = 'http://' . $HTTP_HOST . $PATH_INFO;");
            sb.Append(Environment.NewLine);
            sb.Append("$dns = strrev($dns);");
            sb.Append(Environment.NewLine);
            sb.Append("$dns = strrev(substr($dns, strpos($dns,'/')));");
            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);
            sb.Append("$nome_script = $_SERVER['SCRIPT_NAME'];");
            sb.Append(Environment.NewLine);
            sb.Append("$nome_script = strrev($nome_script);");
            sb.Append(Environment.NewLine);
            sb.Append("$nome_script = strrev( substr( $nome_script, 0, strpos($nome_script,'/')) );");
            sb.Append(Environment.NewLine);
            sb.Append("$vForm = '';");
            sb.Append(Environment.NewLine);
            sb.Append("if ( isset($_GET['acao']) ){");
            sb.Append(Environment.NewLine);
            sb.Append("if ( ($_GET['acao'] != '4') && ($_GET['acao'] != '') ){");
            sb.Append(Environment.NewLine);
            sb.Append("$vForm = '2';");
            sb.Append(Environment.NewLine);
            sb.Append("}");
            sb.Append(Environment.NewLine);
            sb.Append("}");
            sb.Append(Environment.NewLine);

            sb.Append("ini_set('allow_call_time_pass_reference', '1');");
            sb.Append(Environment.NewLine);

            sb.Append("/*");
            sb.Append(Environment.NewLine);
            sb.Append("'===============================================================================");
            sb.Append(Environment.NewLine);
            sb.Append("' Name: mensagem as Boolean");
            sb.Append(Environment.NewLine);
            sb.Append("' Purpose: Variável para a montagem da linha com a mensagem de bem vindo e com o");
            sb.Append(Environment.NewLine);
            sb.Append("'          botao de logoff.");
            sb.Append("'/n'");
            sb.Append("' Remarks:");
            sb.Append(Environment.NewLine);
            sb.Append("'===============================================================================");
            sb.Append(Environment.NewLine);
            sb.Append("*/");
            sb.Append(Environment.NewLine);
            sb.Append("$mensagem = true;");
            sb.Append(Environment.NewLine);

            sb.Append("/*");
            sb.Append(Environment.NewLine);
            sb.Append("'===============================================================================");
            sb.Append(Environment.NewLine);
            sb.Append("' Name: menu as Boolean");
            sb.Append(Environment.NewLine);
            sb.Append("' Purpose: Variável para a montagem do menu do lado esquerdo (navegação).");
            sb.Append(Environment.NewLine);
            sb.Append("' Remarks:");
            sb.Append(Environment.NewLine);
            sb.Append("'===============================================================================");
            sb.Append(Environment.NewLine);
            sb.Append("*/");
            sb.Append(Environment.NewLine);
            sb.Append("$menu = true;");
            sb.Append(Environment.NewLine);

            sb.Append("/*");
            sb.Append(Environment.NewLine);
            sb.Append("'===============================================================================");
            sb.Append(Environment.NewLine);
            sb.Append("' Name: Configuração do banco de dados");
            sb.Append(Environment.NewLine);
            sb.Append("' Remarks:");
            sb.Append(Environment.NewLine);
            sb.Append("'===============================================================================");
            sb.Append(Environment.NewLine);
            sb.Append("*/");
            sb.Append(Environment.NewLine);

            sb.Append("$cfgDBGlobal = new ConfigBanco;");
            sb.Append(Environment.NewLine);

            sb.Append("$cfgDBGlobal->setUsuario('");
            sb.Append(usuario);
            sb.Append("');");
            sb.Append(Environment.NewLine);
            sb.Append("$cfgDBGlobal->setSenha('");
            sb.Append(senha);
            sb.Append("');");
            sb.Append(Environment.NewLine);
            sb.Append("$cfgDBGlobal->setSgbd( 'mysql' );");
            sb.Append(Environment.NewLine);
            sb.Append("$cfgDBGlobal->setServidor('");
            sb.Append(servidor);
            sb.Append("');");
            sb.Append(Environment.NewLine);
            sb.Append("$cfgDBGlobal->setBanco('");
            sb.Append(banco);
            sb.Append("');");
            sb.Append(Environment.NewLine);

            sb.Append("//exit($cfgDBGlobal->servidor . $cfgDBGlobal->banco );");
            sb.Append(Environment.NewLine);

            sb.Append("$GLOBALS['conn'] = new Conexao( $cfgDBGlobal->sgbd, $cfgDBGlobal->servidor, $cfgDBGlobal->usuario, $cfgDBGlobal->senha, $cfgDBGlobal->banco );");
            sb.Append(Environment.NewLine);

            sb.Append("?>");
            sb.Append(Environment.NewLine);

            resultado = sb.ToString();
            return resultado;
        }

        public string MontaViewAdd(string tabela)
        {
            sb.Clear();
            resultado = string.Empty;


            sb.Append("<?php");
            sb.AppendLine();
            sb.Append("     require_once('default.php');");
            sb.AppendLine();
            sb.Append("     if ($_REQUEST['acao'] == 1 && $_REQUEST['operacao'] == 1) {");
            sb.AppendLine();
            sb.Append("     ?>");
            sb.AppendLine();
            sb.Append("");
            sb.AppendLine();
            sb.Append("     <div id=\"container\" style=\"width: 100%;\">");
            sb.AppendLine();
	        sb.Append("         <div id=\"content\">");
            sb.AppendLine();
	        sb.Append("         <?php");
            sb.AppendLine();
		    sb.Append("             if (( $_REQUEST['msgErro'] != \"existe\") && ($_REQUEST['msgErro'] != \"\")) {			");
            sb.AppendLine();
		    sb.Append("             ?>");
            sb.AppendLine();
			sb.Append("                 <div class=\"notification error\" style=\"cursor: auto;\">");
            sb.AppendLine();
			sb.Append("                 <span></span>");
            sb.AppendLine();
			sb.Append("                 <div class=\"text\">");
            sb.AppendLine();
			sb.Append("                 <p>.....</p>");
            sb.AppendLine();
			sb.Append("                 <p><strong>Erro!</strong> Não foi possível inserir o registro, favor verificar com o suporte!.  </p>");
            sb.AppendLine();
			sb.Append("         </div>");
            sb.AppendLine();
    		sb.Append("     </div>");
            sb.AppendLine();
		    sb.Append("     <?");
            sb.AppendLine();
		    sb.Append("     }elseif( $_REQUEST['msgOK'] != \"\" ){");
            sb.AppendLine();
		    sb.Append("     ?>");
            sb.AppendLine();
		    sb.Append("     <div class=\"notification success\" style=\"cursor: auto;\" id=\"teste\">");
            sb.AppendLine();
			sb.Append("         <span></span>");
            sb.AppendLine();
			sb.Append("         <div class=\"text\">");
            sb.AppendLine();
			sb.Append("             <p>.....</p>");
            sb.AppendLine();
			sb.Append("             <p><strong>Successo!</strong> Registro inserido com sucesso!.</p>");
            sb.AppendLine();
			sb.Append("         </div>");
            sb.AppendLine();
		    sb.Append("     </div>");
            sb.AppendLine();
		    sb.Append("     <?			");
            sb.AppendLine();
		    sb.Append("     } 		");
            sb.AppendLine();
		    sb.Append("     elseif ($_REQUEST['msgErro'] == \"existe\") {			");
            sb.AppendLine();
		    sb.Append("     ?>");
            sb.AppendLine();
			sb.Append("     <div class=\"notification info\" style=\"cursor: auto;\">");
            sb.AppendLine();
			sb.Append("         <span></span>");
            sb.AppendLine();
			sb.Append("         <div class=\"text\">");
            sb.AppendLine();
			sb.Append("             <p>.....</p>");
            sb.AppendLine();
			sb.Append("             <p><strong>Erro!</strong> "+ tabela +" Já está cadastrado(a).  </p>");
            sb.AppendLine();
			sb.Append("         </div>");
            sb.AppendLine();
			sb.Append("     </div>");
            sb.AppendLine();
		    sb.Append("     <?");
            sb.AppendLine();
		    sb.Append("     }");
            sb.AppendLine();
		    sb.Append("     ?>");
            sb.AppendLine();
            sb.Append("     <div class='tituloForm'>Cadastrar " + tabela + "</div>");
            sb.AppendLine();
		    sb.Append("         <form id=\"form1\" name=\"form1\" method=\"post\" action=\"<?=$link?>/add\" onsubmit=\"return submitForm();\" enctype=\"multipart/form-data\">");
            sb.AppendLine();
			sb.Append("             <input type=\"hidden\" name=\"acao\" value=\"1\"/>");
            sb.AppendLine();
			sb.Append("             <input type=\"hidden\" name=\"operacao\" value=\"2\"/>");
            sb.AppendLine();
			sb.Append("             <table class=\"formulario\">");
            sb.AppendLine();
            sb.Append("");
            sb.AppendLine();
                sb.Append(RetornaEstruturaCamposADDIndexFiltro(tabela));
            sb.AppendLine();
            sb.Append("			");
            sb.AppendLine();
		    sb.Append("             <tr>");
            sb.AppendLine();
		    sb.Append("                    <td colspan=\"2\" style=\"text-align: center;color: red;\">* obrigat&oacute;rio(s)</td>");
            sb.AppendLine();
		    sb.Append("             </tr>");
            sb.AppendLine();
			sb.Append("             </table>");
            sb.AppendLine();
            sb.Append("             <input type=\"submit\" name=\"salvar\" value=\"Salvar\" onClick=\"javascript: return enviar2(form1);\" />");
            sb.AppendLine();
            sb.Append("             <input type=\"button\" name=\"voltar\" value=\"Voltar\" class=\"voltar\" onclick=\"window.location.href='<?=$link?>/index'\"/>");
            sb.AppendLine();
            sb.Append("			");
            sb.AppendLine();
		    sb.Append("         </form>");
            sb.AppendLine();
	        sb.Append("     </div>");
            sb.AppendLine();
            sb.Append("</div>");
            sb.AppendLine();
            sb.Append("<?");
            sb.AppendLine();
            sb.Append("  ");
            sb.AppendLine();
            sb.Append("}");
            sb.AppendLine();
            sb.Append("");
            sb.AppendLine();
            sb.Append("     if ($_REQUEST['acao'] == 1 && $_REQUEST['operacao'] == 2) {");
            sb.AppendLine();
            if (sts_verifica_registro_existente)
            {


                sb.Append("         if ($data->existe(" + RetornaCamposRequestParametro(tabela) + ")){");
                sb.AppendLine();
                sb.Append("             $msgErro = 'existe';");
                sb.AppendLine();
                sb.Append("         }else");
                sb.AppendLine();
                sb.Append("         {	");
                sb.AppendLine();
                sb.Append("         if ($data->add()) {");
                sb.AppendLine();
                sb.Append("             $msgOK = 'Registro inserido com sucesso!';");
                sb.AppendLine();
                sb.Append("         }else {");
                sb.AppendLine();
                sb.Append("             $msgErro = 'Não foi Possível inserir registro!';");
                sb.AppendLine();
                sb.Append("         }");
                sb.AppendLine();
                sb.Append("     }");
            }
            else
            {  
                sb.AppendLine();
                sb.Append("         if ($data->add()) {");
                sb.AppendLine();
                sb.Append("             $msgOK = 'Registro inserido com sucesso!';");
                sb.AppendLine();
                sb.Append("         }else {");
                sb.AppendLine();
                sb.Append("             $msgErro = 'Não foi Possível inserir registro!';");
                sb.AppendLine();
                sb.Append("         }");
                sb.AppendLine();
            }
            sb.AppendLine();
            sb.Append("	");
            sb.AppendLine();
	        sb.Append("         header('location:' . $link . '/add&acao=1&operacao=1&msgOK=' . $msgOK . '&msgErro=' . $msgErro );");
            sb.AppendLine();
            sb.Append(" }");
            sb.AppendLine();
            sb.Append("");
            sb.AppendLine();
            sb.Append("         $data->fecharConn();");
            sb.AppendLine();
            sb.Append("?>");

            resultado = sb.ToString();
            return resultado;
        }

        public string MontaViewDefault(string tabela)
        {
            sb.Clear();
            resultado = string.Empty;
            DataTable dt = new DataTable();
            DataTable dt_campos = new DataTable();
            int cont;
            System.Globalization.CultureInfo cultureinfo = System.Threading.Thread.CurrentThread.CurrentCulture; 

            sb.Append("<?");
            sb.AppendLine();
            dt = VerificaRelacionamentoTabela(txt_banco.Text , tabela);
            dt_campos = RetornaTipoCamposTabela(tabela);
            sb.AppendLine();
            sb.Append("require_once('../../models/" + tabela + ".php');");
            
            sb.AppendLine();          

            cont = 0;
            foreach (DataRow row in dt.Rows)
            {  
                sb.Append("require_once('../../models/" + row.ItemArray[2] + ".php');");
                sb.AppendLine();
                sb.AppendLine();
                sb.Append("$" + row.ItemArray[2] + "    = new  " + cultureinfo.TextInfo.ToTitleCase(row.ItemArray[2].ToString()) + "();");
                sb.AppendLine();
                cont++;
            }
            sb.AppendLine();
            sb.Append("$data    = new  " + cultureinfo.TextInfo.ToTitleCase(tabela) + "();");
            sb.AppendLine();
            sb.AppendLine();
            sb.Append("$link = 'app.php?app=' . $app;");

            sb.AppendLine();
            sb.Append("?>");
            sb.AppendLine();
            sb.Append("<script type=\"text/javascript\">");
            sb.AppendLine();
	        sb.Append("$(function() {");
            sb.AppendLine();
		    sb.Append("     $(\"table\")");
            sb.AppendLine();
			sb.Append("             .tablesorter({ ");
            sb.AppendLine();
			sb.Append("                 headers: {");
            sb.AppendLine();
            sb.Append("                     " + dt_campos.Rows.Count + ": {");
            sb.AppendLine();
			sb.Append("                     sorter: false ");
            sb.AppendLine();
			sb.Append("             }");
            sb.AppendLine();
			sb.Append("     },");
            sb.AppendLine();
			sb.Append("     widthFixed: true, ");
            sb.AppendLine();
			sb.Append("     widgets: ['zebra']");
            sb.AppendLine();
			sb.Append("     })");
            sb.AppendLine();
	        sb.Append("});");
            sb.AppendLine();
            sb.Append("</script>");
            sb.AppendLine();


            resultado = sb.ToString();
            return resultado;
        }

        public string MontaViewEdit(string tabela)
        {
            sb.Clear();
            System.Globalization.CultureInfo cultureinfo = System.Threading.Thread.CurrentThread.CurrentCulture; 
            resultado = string.Empty;


            sb.Append("<?php");
            sb.AppendLine();
            sb.Append("     require_once('default.php');");
            sb.AppendLine();
            sb.Append("     if ($_REQUEST['acao'] == 2 && $_REQUEST['operacao'] == 1) {");
            sb.AppendLine();
            sb.Append("         $obj = $data->get" + cultureinfo.TextInfo.ToTitleCase(tabela) + "($_REQUEST['id']);");
            sb.AppendLine();
            sb.Append("     ?>");
            sb.AppendLine();
            sb.Append("");
            sb.AppendLine();
            sb.Append("     <div id=\"container\" style=\"width: 100%;\">");
            sb.AppendLine();
            sb.Append("         <div id=\"content\">");
            sb.AppendLine();
            sb.Append("         <?php");
            sb.AppendLine();
            sb.Append("             if (( $_REQUEST['msgErro'] != \"existe\") && ($_REQUEST['msgErro'] != \"\")) {			");
            sb.AppendLine();
            sb.Append("             ?>");
            sb.AppendLine();
            sb.Append("                 <div class=\"notification error\" style=\"cursor: auto;\">");
            sb.AppendLine();
            sb.Append("                 <span></span>");
            sb.AppendLine();
            sb.Append("                 <div class=\"text\">");
            sb.AppendLine();
            sb.Append("                 <p>.....</p>");
            sb.AppendLine();
            sb.Append("                 <p><strong>Erro!</strong> Não foi possível Alterar o registro, favor verificar com o suporte!.  </p>");
            sb.AppendLine();
            sb.Append("         </div>");
            sb.AppendLine();
            sb.Append("     </div>");
            sb.AppendLine();
            sb.Append("     <?");
            sb.AppendLine();
            sb.Append("     }elseif( $_REQUEST['msgOK'] != \"\" ){");
            sb.AppendLine();
            sb.Append("     ?>");
            sb.AppendLine();
            sb.Append("     <div class=\"notification success\" style=\"cursor: auto;\" id=\"teste\">");
            sb.AppendLine();
            sb.Append("         <span></span>");
            sb.AppendLine();
            sb.Append("         <div class=\"text\">");
            sb.AppendLine();
            sb.Append("             <p>.....</p>");
            sb.AppendLine();
            sb.Append("             <p><strong>Successo!</strong> Registro Alterado com sucesso!.</p>");
            sb.AppendLine();
            sb.Append("         </div>");
            sb.AppendLine();
            sb.Append("     </div>");
            sb.AppendLine();
            sb.Append("     <?			");
            sb.AppendLine();
            sb.Append("     } 		");
            sb.AppendLine();
            sb.Append("     elseif ($_REQUEST['msgErro'] == \"existe\") {			");
            sb.AppendLine();
            sb.Append("     ?>");
            sb.AppendLine();
            sb.Append("     <div class=\"notification info\" style=\"cursor: auto;\">");
            sb.AppendLine();
            sb.Append("         <span></span>");
            sb.AppendLine();
            sb.Append("         <div class=\"text\">");
            sb.AppendLine();
            sb.Append("             <p>.....</p>");
            sb.AppendLine();
            sb.Append("             <p><strong>Erro!</strong> " + tabela + " Já está cadastrado(a).  </p>");
            sb.AppendLine();
            sb.Append("         </div>");
            sb.AppendLine();
            sb.Append("     </div>");
            sb.AppendLine();
            sb.Append("     <?");
            sb.AppendLine();
            sb.Append("     }");
            sb.AppendLine();
            sb.Append("     ?>");
            sb.AppendLine();
            sb.Append("     <div class='tituloForm'>Alterar " + tabela + "</div>");
            sb.AppendLine();
            sb.Append("         <form id=\"form1\" name=\"form1\" method=\"post\" action=\"<?=$link?>/edit\" onsubmit=\"return submitForm();\" enctype=\"multipart/form-data\">");
            sb.AppendLine();
            sb.Append("             <input type=\"hidden\" name=\"acao\" value=\"2\"/>");
            sb.AppendLine();
            sb.Append("             <input type=\"hidden\" name=\"operacao\" value=\"2\"/>");
            sb.AppendLine();
            sb.Append("             <input type=\"hidden\" name=\"id\" value=\"<?=$obj['id']?>\"/>");
            sb.AppendLine();
			sb.Append("             <input type=\"hidden\" name=\"menu_id\" value=\"<?=$menu_id?>\"/>");
            sb.AppendLine();
            sb.Append("");
            sb.Append("             <table class=\"formulario\">");
            sb.AppendLine();
            sb.Append("");
            sb.AppendLine();
            sb.Append(RetornaEstruturaCamposEditIndexFiltro(tabela));
            sb.AppendLine();
            sb.Append("			");
            sb.AppendLine();
            sb.Append("             <tr>");
            sb.AppendLine();
            sb.Append("                    <td colspan=\"2\" style=\"text-align: center;color: red;\">* obrigat&oacute;rio(s)</td>");
            sb.AppendLine();
            sb.Append("             </tr>");
            sb.AppendLine();
            sb.Append("             </table>");
            sb.AppendLine();
            sb.Append("             <input type=\"submit\" name=\"salvar\" value=\"Salvar\" onClick=\"javascript: return enviar2(form1);\" />");
            sb.AppendLine();
            sb.Append("             <input type=\"button\" name=\"voltar\" value=\"Voltar\" class=\"voltar\" onclick=\"window.location.href='<?=$link?>/index'\"/>");
            sb.AppendLine();
            sb.Append("			");
            sb.AppendLine();
            sb.Append("         </form>");
            sb.AppendLine();
            sb.Append("     </div>");
            sb.AppendLine();
            sb.Append("</div>");
            sb.AppendLine();
            sb.Append("<?");
            sb.AppendLine();
            sb.Append("  ");
            sb.AppendLine();
            sb.Append("}");
            sb.AppendLine();
            sb.Append("");
            sb.AppendLine();
            sb.Append("     if ($_REQUEST['acao'] == 2 && $_REQUEST['operacao'] == 2) {");
            sb.AppendLine();
            if (sts_verifica_registro_existente)
            {


                sb.Append("         if ($data->existe(" + RetornaCamposRequestParametro(tabela) + ")){");
                sb.AppendLine();
                sb.Append("             $msgErro = 'existe';");
                sb.AppendLine();
                sb.Append("         }else");
                sb.AppendLine();
                sb.Append("         {	");
                sb.AppendLine();
                sb.Append("         if ($data->add()) {");
                sb.AppendLine();
                sb.Append("             $msgOK = 'Registro Alterado com sucesso!';");
                sb.AppendLine();
                sb.Append("         }else {");
                sb.AppendLine();
                sb.Append("             $msgErro = 'Não foi Possível Alterar registro!';");
                sb.AppendLine();
                sb.Append("         }");
                sb.AppendLine();
                sb.Append("     }");
            }
            else
            {
                sb.AppendLine();
                sb.Append("         if ($data->add()) {");
                sb.AppendLine();
                sb.Append("             $msgOK = 'Registro Alterado com sucesso!';");
                sb.AppendLine();
                sb.Append("         }else {");
                sb.AppendLine();
                sb.Append("             $msgErro = 'Não foi Possível Alterar registro!';");
                sb.AppendLine();
                sb.Append("         }");
                sb.AppendLine();
            }
            sb.AppendLine();
            sb.Append("	");
            sb.AppendLine();
            sb.Append("         header('location:' . $link . '/add&acao=1&operacao=1&msgOK=' . $msgOK . '&msgErro=' . $msgErro );");
            sb.AppendLine();
            sb.Append(" }");
            sb.AppendLine();
            sb.Append("");
            sb.AppendLine();
            sb.Append("         $data->fecharConn();");
            sb.AppendLine();
            sb.Append("?>");

            resultado = sb.ToString();
            return resultado;
        }
        
        public string MontaViewIndex(string tabela)
        {
            sb.Clear();
            resultado = string.Empty;
            int count_col_pan;
            DataTable dt_relarionamentos = new DataTable();
            DataTable dt_campos = new DataTable();
            System.Globalization.CultureInfo cultureinfo = System.Threading.Thread.CurrentThread.CurrentCulture; 

            dt_relarionamentos = VerificaRelacionamentoTabela(txt_banco.Text , tabela);
            dt_campos = RetornaTipoCamposTabela(tabela);


            sb.Append("<?");
            sb.AppendLine();
            sb.Append("require_once('default.php');");
            sb.AppendLine();
            sb.Append("?>");
            sb.AppendLine();
            sb.Append("<div id=\"container\">");
            sb.AppendLine();
            sb.Append("     <div id=\"content\">			");
            sb.AppendLine();
			// início do div que realiza o filtro
            sb.Append("         <div id='divFiltro' class=\"x-hidden pesquisar\">		");
            sb.AppendLine();
    		sb.Append("         <form id=\"form1\" name=\"form1\" method=\"post\" action=\"<?=$link?>/index\">");
            sb.AppendLine();
			sb.Append("             <input type=\"hidden\" name=\"menu_id\" value=\"<?=$menu_id?>\"/>");
            sb.AppendLine();
			sb.Append("             <table class=\"formulario\">");
            sb.AppendLine();

                sb.Append(RetornaEstruturaCamposADDIndexFiltro(tabela)); 

            // início da Estrutura que pode ser aproveitada para criar os campos do index e do ADD.
			sb.Append("            </table>");
            sb.AppendLine();
			sb.Append("            <input type=\"submit\" value=\"Filtrar\" />");
            sb.AppendLine();
			sb.Append("            <input type=\"reset\" value=\"Limpar\" />");
            sb.AppendLine();
			sb.Append("         </form>");
            sb.AppendLine();
			sb.Append("</div>");
            // FIM do div que realiza o filtro

            sb.AppendLine();
            sb.Append("		");
            sb.AppendLine();
		    sb.Append("     <div class=\"actions\">");
            sb.AppendLine();
			sb.Append("         <a href='<?=$link?>/add&acao=1&operacao=1&menu_id=<?=$menu_id?>' id='add' class='add'>Novo</a> | <a href='#' id='pesquisar' class='lupa'>Pesquisar/Filtrar</a>");
            sb.AppendLine();
            sb.Append("         <a <img src=\"../../images/actions/printer.png\"  href=\"#\" target=\"_blank\" title=\"Visualizar Relat&ouml;rio\" class='printer' >Relat&ouml;rio</a>			");
            sb.AppendLine();
		    sb.Append("     </div> ");
            sb.AppendLine();
            sb.Append("		");
            sb.AppendLine();
		    sb.Append("     <table cellspacing=\"1\" class=\"tablesorter\">");
            sb.AppendLine();
			sb.Append("         <thead>");
            sb.AppendLine();
			sb.Append("             <tr >");
            dt_campos = RetornaTipoCamposTabela(tabela);
            count_col_pan = dt_campos.Rows.Count+2;
            // lista de nomes dos campos
            foreach (DataRow row in dt_campos.Rows)
            {
                sb.AppendLine();
                sb.Append("");
                sb.Append("             <th>" + row.ItemArray[0] + "</th>");
                sb.AppendLine();
            }

            sb.Append("                 <th class=\"tdAcoes\">A&ccedil;ões</th>");
            sb.AppendLine();
			sb.Append("             </tr>");
            sb.AppendLine();
			sb.Append("         </thead>");
            sb.AppendLine();
			sb.Append("         <tfoot>");
            sb.AppendLine();
			sb.Append("             <tr>");
            sb.AppendLine();
            sb.Append("                 <th colspan='" + count_col_pan + "'>&nbsp;</th>");
            sb.AppendLine();
			sb.Append("             </tr>");
            sb.AppendLine();
			sb.Append("         </tfoot>");
            sb.AppendLine();
			sb.Append("         <tbody align=\"center\">	");
            sb.AppendLine();
			sb.Append("<? ");
            sb.AppendLine();


            sb.Append("         $objCol = $data->get" + cultureinfo.TextInfo.ToTitleCase(tabela) + "('');			");
            sb.AppendLine();
			sb.Append("         $objPaginacao = new PaginacaoLink( $objCol, 20,'');");
            sb.AppendLine();
            sb.Append("			");
            sb.AppendLine();
			sb.Append("         while ($objPaginacao->colecao->Proximo()){");
            sb.AppendLine();
			sb.Append("         $obj = $objPaginacao->colecao->getItem();");
            sb.AppendLine();
			sb.Append("?>");
            sb.AppendLine();
			sb.Append("         <tr <?=($i++ % 2 == 0) ? ' class=\"altrow\"' : '';?>>");
            sb.AppendLine();
            sb.AppendLine();
			// Retornar os campos para o objeto na página
            foreach (DataRow row in dt_campos.Rows)
            {
                sb.AppendLine();
                if ((row.ItemArray[1].ToString().IndexOf("float") != -1) || (row.ItemArray[1].ToString().IndexOf("decimal") != -1) || (row.ItemArray[1].ToString().IndexOf("money") != -1))
                {
                    sb.Append("         <td><?= number_format($obj['" + row.ItemArray[0].ToString() + "'], 2 ,\",\", \".\");?></td>");
                }
                else
                {
                    sb.Append("         <td><?=$obj['" + row.ItemArray[0].ToString() + "']?></td>");
                }
                sb.AppendLine();
            }
		
			sb.Append("         <td class=\"actions\">");
            sb.AppendLine();
			sb.Append("<?");
            sb.AppendLine();
			sb.Append("             $width_img    = 290;");
            sb.AppendLine();
			sb.Append("             $height_img   = 218;");
            sb.AppendLine();
			sb.Append("             $width_thumb  = 133;");
            sb.AppendLine();
			sb.Append("             $height_thumb = 100;");
            sb.AppendLine();
			sb.Append("             $paramImg = \"menu_id=\".$menu_id.\"&menu_nome=\".$app.\"&relacionamento_id=\".$obj['id'].\"&relacionamento_nome=\".$obj['nome'].\"&width_img=\".$width_img.\"&height_img=\".$height_img.\"&width_thumb=\".$width_thumb.\"&height_thumb=\".$height_thumb;");
            sb.AppendLine();
		    sb.Append("?>					");
            sb.AppendLine();
			sb.Append("             <a href=\"<?=$link?>/view&id=<?=$obj['id']?>&menu_id=<?=$menu_id?>\"><img src=\"../../images/actions/lupa.png\" title=\"Vizualizar\" alt=\"\" /></a>");
            sb.AppendLine();
			sb.Append("             <a href=\"<?=$link?>/edit&id=<?=$obj['id']?>&acao=2&operacao=1&menu_id=<?=$menu_id?>\"><img src=\"../../images/actions/edit.png\" title=\"Editar\" alt=\"\" /></a>");
            sb.AppendLine();
			sb.Append("             <a href=\"<?=$link?>/index&id=<?=$obj['id']?>&acao=3&operacao=2&menu_id=<?=$menu_id?>\" onclick=\"return confirm('Deseja realmente deletar o registro');\">");
            sb.AppendLine();
			sb.Append("             <img src=\"../../images/actions/delete.png\" title=\"Deletar\" alt=\"\" /></a>				");
            sb.AppendLine();
			sb.Append("         </td>");
            sb.AppendLine();
			sb.Append(" </tr>");
            sb.AppendLine();
			sb.Append("<?					");
            sb.AppendLine();
			sb.Append("}?>");
            sb.AppendLine();
			sb.Append("     </tbody>");
            sb.AppendLine();
		    sb.Append("</table>");
            sb.AppendLine();
		    sb.Append("<!-- PAGINA&ccedil;&Atilde;O -->");
            sb.AppendLine();
		    sb.Append("<div id=\"paginacao\">");
            sb.AppendLine();
			sb.Append("Foi encontrado um total de <b><?=$objPaginacao->qtdRegistros?></b> registro(s).<?=$objPaginacao->getMsgPaginacao()?>");
            sb.AppendLine();
		    sb.Append("</div>");
            sb.AppendLine();
		    sb.Append("<!-- PAGINA&ccedil;&Atilde;O -->    ");
            sb.AppendLine();
	        sb.Append("</div>");
            sb.AppendLine();
            sb.Append("</div>");
            sb.AppendLine();
            sb.Append("<?");
            sb.AppendLine();
            sb.Append("if ($_REQUEST['acao'] == 3 && $_REQUEST['operacao'] == 2) {");
            sb.AppendLine();
	        sb.Append("     if ($data->delete()) {");
            sb.AppendLine();
		    sb.Append("     $msg = 'Registro excluido com sucesso!';");
            sb.AppendLine();
	        sb.Append("     }else {");
            sb.AppendLine();
		    sb.Append("         $msg = 'N&atilde;o foi possível excluir o registro!';");
            sb.AppendLine();
	        sb.Append("     }");
            sb.AppendLine();
	        sb.Append("     header('location:' . $link . '/index&msg=' . $msg . '&menu_id=' . $menu_id);");
            sb.AppendLine();
            sb.Append("}");
            sb.AppendLine();
            sb.Append("     $data->fecharConn();");
            sb.AppendLine();
            sb.Append("?>");
            sb.AppendLine();


            resultado = sb.ToString();
            return resultado;
        }


        public string MontaViewView(string tabela)
        {
            sb.Clear();        
            DataTable dt_relarionamentos = new DataTable();
            DataTable dt_campos = new DataTable();
            System.Globalization.CultureInfo cultureinfo = System.Threading.Thread.CurrentThread.CurrentCulture;

            dt_relarionamentos = VerificaRelacionamentoTabela(txt_banco.Text, tabela);
            dt_campos = RetornaTipoCamposTabela(tabela);


            sb.Append("<?");
            sb.AppendLine();
            sb.Append("    require_once('default.php');");
            sb.AppendLine();
            sb.Append("    $obj = $data->get" + cultureinfo.TextInfo.ToTitleCase(tabela) + "($_REQUEST['id']);");
            sb.AppendLine();
            sb.Append("    ?>");
            sb.AppendLine();
            sb.Append("    <div id=\"container\">");
            sb.AppendLine();
	        sb.Append("        <div id=\"content\">");
            sb.AppendLine();
	        sb.Append("            <div class=\"users view\">");
            sb.AppendLine();
			sb.Append("                <dl>");
            sb.AppendLine();
            sb.Append("	                <p class='header'>" + cultureinfo.TextInfo.ToTitleCase(tabela) + "</p>");
            sb.AppendLine();
            // Campos
            foreach (DataRow item in dt_campos.Rows)
            {
                sb.AppendLine();
                sb.Append("	                <dt>" + cultureinfo.TextInfo.ToTitleCase(item.ItemArray[0].ToString()) + "</dt>");
                sb.Append("	                <dd><?=$obj['" + item.ItemArray[0] + "']?>&nbsp;</dd>");
                sb.AppendLine();
            }
            //mata o datatable
            dt_campos.Dispose();
            sb.AppendLine();
			sb.Append("                </dl>");
            sb.AppendLine();
			sb.Append("                <input type=\"button\" value=\"Editar\" class=\"editar\" onclick=\"window.location='<?=$link?>/edit&acao=2&operacao=1&id=<?=$obj['id']?>'\" />    ");
            sb.AppendLine();
			sb.Append("                <input type=\"button\" name=\"voltar\" value=\"Voltar\" class=\"voltar\" onclick=\"window.location.href='<?=$link?>/index'\"/>");
            sb.AppendLine();
		    sb.Append("            </div>");
            sb.AppendLine();
	        sb.Append("        </div>");
            sb.AppendLine();
            sb.Append("    </div> ");
            sb.AppendLine();
            sb.Append("    <?$data->fecharConn();?>");
            sb.AppendLine();
            
            return sb.ToString();
        }

        private string RetornaEstruturaCamposADDIndexFiltro(string tabela)
        {
            DataTable dt_relarionamentos = new DataTable();
            DataTable dt_campos = new DataTable();
            StringBuilder sb_campo = new StringBuilder();
            System.Globalization.CultureInfo cultureinfo = System.Threading.Thread.CurrentThread.CurrentCulture;

            dt_relarionamentos = VerificaRelacionamentoTabela(txt_banco.Text, tabela);
            dt_campos = RetornaTipoCamposTabela(tabela);

            // início da Estrutura que pode ser aproveitada para criar os campos do index e do ADD.

            // para os relacionamentos da tabela
            foreach (DataRow row in dt_relarionamentos.Rows)
            {
                sb_campo.AppendLine();
                sb_campo.Append("              <tr>");
                sb_campo.AppendLine();
                sb_campo.Append("");
                sb_campo.AppendLine();
                sb_campo.Append("                     <td>Selecione " + row.ItemArray[2] + "</td>");
                sb_campo.AppendLine();
                sb_campo.Append("                     <td>");
                sb_campo.AppendLine();
                sb_campo.Append("                             <select name=\"" + row.ItemArray[1] + "\" >");
                sb_campo.AppendLine();
                sb_campo.Append("	                                <option value=\"\">Selecione " + row.ItemArray[2] + "</option>");
                sb_campo.AppendLine();
                sb_campo.Append("	                                <?=$" + row.ItemArray[2] + "->getCombo" + cultureinfo.TextInfo.ToTitleCase(row.ItemArray[2].ToString()) + "('');?>");
                sb_campo.AppendLine();
                sb_campo.Append("                             </select>");
                sb_campo.AppendLine();
                sb_campo.Append("                     </td>");
                sb_campo.AppendLine();
                sb_campo.Append("              </tr>");
            }

            sb_campo.AppendLine();

            // para os campos da tabela
            foreach (DataRow row in dt_campos.Rows)
            {
                sb_campo.AppendLine();

                // Somente campos que não sejam autoincrement
                if (row.ItemArray[5].ToString().IndexOf("auto_increment") == -1)
                {
                    // campos do tipo data
                    if (row.ItemArray[1].ToString().IndexOf("date") != -1)
                    {
                        sb_campo.AppendLine();
                        sb_campo.Append("             <tr>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 <td>" + row.ItemArray[0].ToString() + "</td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 <td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                         <input name=\"" + row.ItemArray[0].ToString() + "\" type=\"date\" placeholder=\"Data do(a) " + row.ItemArray[0].ToString() + " id=\"" + row.ItemArray[0].ToString() + "\"");
                        if (row.ItemArray[2].ToString().IndexOf("NO") != -1)
                        {
                            sb_campo.Append(" required ");
                        }

                        sb_campo.Append(" />");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 </td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("             </tr>");
                        sb_campo.AppendLine();
                        sb_campo.AppendLine();
                    }

                    // campos do tipo text
                    if (row.ItemArray[1].ToString().IndexOf("text") != -1)
                    {
                        sb_campo.AppendLine();
                        sb_campo.Append("             <tr>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 <td>" + row.ItemArray[0].ToString() + "</td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 <td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                     <textarea  cols=\"80\" rows=\"10\" name=\"" + row.ItemArray[0].ToString() + "\"  id=\"" + row.ItemArray[0].ToString() + "\"> Digite seu texto aqui.. ");
                        if (row.ItemArray[2].ToString().IndexOf("NO") != -1)
                        {
                            sb_campo.Append(" required");
                        }
                        sb_campo.Append("</textarea>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 </td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("             </tr>");
                        sb_campo.AppendLine();
                        sb_campo.AppendLine();
                    }

                    // campos do tipo text
                    if (row.ItemArray[1].ToString().IndexOf("char") != -1)
                    {
                        sb_campo.AppendLine();
                        sb_campo.Append("             <tr>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 <td>" + row.ItemArray[0].ToString() + "</td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 <td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                     <input type=\"text\" placeholder=\"preencha o " + row.ItemArray[0].ToString() + "\" name=\"" + row.ItemArray[0].ToString() + "\"  id=\"" + row.ItemArray[0].ToString() + "\"");
                        if (row.ItemArray[2].ToString().IndexOf("NO") != -1)
                        {
                            sb_campo.Append(" required");
                        }

                        sb_campo.Append(" />");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 </td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("             </tr>");
                        sb_campo.AppendLine();
                        sb_campo.AppendLine();
                    }

                    // campos do tipo text
                    if ((row.ItemArray[1].ToString().IndexOf("bit") != -1) || (row.ItemArray[1].ToString().IndexOf("tiny") != -1))
                    {
                        sb_campo.AppendLine();
                        sb_campo.Append("             <tr>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 <td>" + row.ItemArray[0].ToString() + "</td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 <td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                     <input type=\"radio\" name=\"" + row.ItemArray[0].ToString() + "\" value=\"1\"  id=\"" + row.ItemArray[0].ToString());
                        if (row.ItemArray[2].ToString().IndexOf("NO") != -1)
                        {
                            sb_campo.Append(" required");
                        }
                        sb_campo.Append("\"checked/>Sim");
                        sb_campo.AppendLine();
                        sb_campo.Append("                     <input type=\"radio\" name=\"" + row.ItemArray[0].ToString() + "\" value=\"0\"  id=\"" + row.ItemArray[0].ToString());
                        if (row.ItemArray[2].ToString().IndexOf("NO") != -1)
                        {
                            sb_campo.Append(" required");
                        }
                        sb_campo.Append("\"checked/>N&atilde;o");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 </td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("             </tr>");
                        sb_campo.AppendLine();
                        sb_campo.AppendLine();
                    }

                }// fecha o if do autoincrement
            }
            return sb_campo.ToString();
        }

        private string RetornaEstruturaCamposEditIndexFiltro(string tabela)
        {
            DataTable dt_relarionamentos = new DataTable();
            DataTable dt_campos = new DataTable();
            StringBuilder sb_campo = new StringBuilder();
            System.Globalization.CultureInfo cultureinfo = System.Threading.Thread.CurrentThread.CurrentCulture;

            dt_relarionamentos = VerificaRelacionamentoTabela(txt_banco.Text, tabela);
            dt_campos = RetornaTipoCamposTabela(tabela);

            // início da Estrutura que pode ser aproveitada para criar os campos do index e do ADD.

            // para os relacionamentos da tabela
            foreach (DataRow row in dt_relarionamentos.Rows)
            {
                sb_campo.AppendLine();
                sb_campo.Append("              <tr>");
                sb_campo.AppendLine();
                sb_campo.Append("");
                sb_campo.AppendLine();
                sb_campo.Append("                     <td>Selecione " + row.ItemArray[2] + "</td>");
                sb_campo.AppendLine();
                sb_campo.Append("                     <td>");
                sb_campo.AppendLine();
                sb_campo.Append("                             <select name=\"" + row.ItemArray[1] + "\" >");
                sb_campo.AppendLine();
                sb_campo.Append("	                                <option value=\"\">Selecione " + row.ItemArray[2] + "</option>");
                sb_campo.AppendLine();
                sb_campo.Append("	                                <?=$" + row.ItemArray[2] + "->getCombo" + cultureinfo.TextInfo.ToTitleCase(row.ItemArray[2].ToString()) + "($obj['" + row.ItemArray[1] + "']);?>");
                sb_campo.AppendLine();
                sb_campo.Append("                             </select>");
                sb_campo.AppendLine();
                sb_campo.Append("                     </td>");
                sb_campo.AppendLine();
                sb_campo.Append("              </tr>");
            }

            sb_campo.AppendLine();

            // para os campos da tabela
            foreach (DataRow row in dt_campos.Rows)
            {
                sb_campo.AppendLine();

                // Somente campos que não sejam autoincrement
                if (row.ItemArray[5].ToString().IndexOf("auto_increment") == -1)
                {
                    // campos do tipo data
                    if (row.ItemArray[1].ToString().IndexOf("date") != -1)
                    {
                        sb_campo.AppendLine();
                        sb_campo.Append("             <tr>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 <td>" + row.ItemArray[0].ToString() + "</td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 <td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                         <input name=\"" + row.ItemArray[0].ToString() + "\" type=\"date\"  value=\"<?=$obj['"+ row.ItemArray[0].ToString() +"']?>\" placeholder=\"Data do(a) " + row.ItemArray[0].ToString() + " id=\"" + row.ItemArray[0].ToString() + "\"");
                        if (row.ItemArray[2].ToString().IndexOf("NO") != -1)
                        {
                            sb_campo.Append(" required ");
                        }

                        sb_campo.Append(" />");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 </td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("             </tr>");
                        sb_campo.AppendLine();
                        sb_campo.AppendLine();
                    }

                    // campos do tipo text
                    if (row.ItemArray[1].ToString().IndexOf("text") != -1)
                    {
                        sb_campo.AppendLine();
                        sb_campo.Append("             <tr>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 <td>" + row.ItemArray[0].ToString() + "</td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 <td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                     <textarea  cols=\"80\" rows=\"10\" value=\"<?=$obj['" + row.ItemArray[0].ToString() + "']?>\" name=\"" + row.ItemArray[0].ToString() + "\"  id=\"" + row.ItemArray[0].ToString() + "\"> Digite seu texto aqui.. ");
                        if (row.ItemArray[2].ToString().IndexOf("NO") != -1)
                        {
                            sb_campo.Append(" required");
                        }
                        sb_campo.Append("</textarea>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 </td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("             </tr>");
                        sb_campo.AppendLine();
                        sb_campo.AppendLine();
                    }

                    // campos do tipo text
                    if (row.ItemArray[1].ToString().IndexOf("char") != -1)
                    {
                        sb_campo.AppendLine();
                        sb_campo.Append("             <tr>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 <td>" + row.ItemArray[0].ToString() + "</td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 <td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                     <input type=\"text\" value=\"<?=$obj['" + row.ItemArray[0].ToString() + "']?>\" placeholder=\"preencha o " + row.ItemArray[0].ToString() + "\" name=\"" + row.ItemArray[0].ToString() + "\"  id=\"" + row.ItemArray[0].ToString() + "\"");
                        if (row.ItemArray[2].ToString().IndexOf("NO") != -1)
                        {
                            sb_campo.Append(" required");
                        }

                        sb_campo.Append(" />");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 </td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("             </tr>");
                        sb_campo.AppendLine();
                        sb_campo.AppendLine();
                    }

                    // campos do tipo text
                    if ((row.ItemArray[1].ToString().IndexOf("bit") != -1) || (row.ItemArray[1].ToString().IndexOf("tiny") != -1))
                    {
                        sb_campo.AppendLine();
                        sb_campo.Append("             <tr>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 <td>" + row.ItemArray[0].ToString() + "</td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 <td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("                     <input type=\"radio\" value=\"<?=$obj['" + row.ItemArray[0].ToString() + "']?>\" name=\"" + row.ItemArray[0].ToString() + "\" value=\"1\"  id=\"" + row.ItemArray[0].ToString());
                        if (row.ItemArray[2].ToString().IndexOf("NO") != -1)
                        {
                            sb_campo.Append(" required");
                        }
                        sb_campo.Append("\"checked/>Sim");
                        sb_campo.AppendLine();
                        sb_campo.Append("                     <input type=\"radio\" value=\"<?=$obj['" + row.ItemArray[0].ToString() + "']?>\" name=\"" + row.ItemArray[0].ToString() + "\" value=\"0\"  id=\"" + row.ItemArray[0].ToString());
                        if (row.ItemArray[2].ToString().IndexOf("NO") != -1)
                        {
                            sb_campo.Append(" required");
                        }
                        sb_campo.Append("\"checked/>N&atilde;o");
                        sb_campo.AppendLine();
                        sb_campo.Append("                 </td>");
                        sb_campo.AppendLine();
                        sb_campo.Append("             </tr>");
                        sb_campo.AppendLine();
                        sb_campo.AppendLine();
                    }

                }// fecha o if do autoincrement
            }
            return sb_campo.ToString();
        }

        public string MontaModel(string tabela)
        {
            System.Globalization.CultureInfo cultureinfo = System.Threading.Thread.CurrentThread.CurrentCulture; 
            StringBuilder sb = new StringBuilder();         
            string resultado; 

            sb.Clear();
            resultado = string.Empty;
           
            sb.Append("<?php");
            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);
            sb.Append("class ");
            sb.Append(cultureinfo.TextInfo.ToTitleCase(tabela));
            sb.Append("{");
            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);           
            sb.Append("private $rs;");
            sb.Append(Environment.NewLine);
            sb.Append("private $objDb;");
            sb.Append(Environment.NewLine);

            // para imagens
            //sb.Append("private $diretorio    = \"../../images/\";");
            //sb.Append(Environment.NewLine);
            //sb.Append("private $diretorio_g  = \"../../images/grandes/\";");
            //sb.Append(Environment.NewLine);
            //sb.Append("private $diretorio_p  = \"../../../projeto/images/thumbs/\";");
            //sb.Append(Environment.NewLine);
            //sb.Append("private $width_img    = 449;");
            //sb.Append(Environment.NewLine);
            //sb.Append("private $height_img   = 337;");
            //sb.Append(Environment.NewLine);
            //sb.Append("private $width_thumb  = 210;");
            //sb.Append(Environment.NewLine);
            //sb.Append("private $height_thumb = 156;");

            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);
            sb.Append("public function __construct()");
            sb.Append(Environment.NewLine);
            sb.Append("{");
            sb.Append(Environment.NewLine);
            sb.Append("     $this->objDb = $GLOBALS['objDb'];");
            sb.Append(Environment.NewLine);
            sb.Append("}");
            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);
            sb.Append(@"//	'############################################################################");
            sb.Append(Environment.NewLine);
            sb.Append(@"//	'#		                 		INSERT                                      #");
            sb.Append(Environment.NewLine);
            sb.Append(@"//	'############################################################################");
            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);
            sb.Append("public function add(){");
            sb.Append(Environment.NewLine);
            sb.Append("    // $upload    = new Upload();");
            sb.Append(Environment.NewLine);
            sb.Append("     $dataHora = new DataHora();");
            sb.Append(Environment.NewLine);            
            sb.Append("     $dbRetorno = true;");
            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);
            sb.Append("     $sql = \" INSERT INTO ");
            sb.Append(tabela);
            sb.Append(" (");
            sb.Append(RetornaCamposTabelaInsert (tabela));
            sb.Append(")");
            sb.Append("\";");
            sb.Append(Environment.NewLine);
            sb.Append(RetornaCamposRequestADD(tabela));
            sb.Append(Environment.NewLine);           
            sb.Append(Environment.NewLine);
            sb.Append("     $idInsert   = $this->objDb->Insert_Id();");
            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);

            sb.Append(@"//	'############################################################################");
            sb.Append(Environment.NewLine);
            sb.Append(@"//	'#		                 		IMAGENS ADD                                   #");
            sb.Append(Environment.NewLine);
            sb.Append(@"//	'############################################################################");
            sb.Append("     ");
            sb.Append(Environment.NewLine);            
            sb.Append(Environment.NewLine);
            sb.Append("     if ($_FILES[\"img\"]['name'] != ''){");
            sb.Append(Environment.NewLine);
            sb.Append("	            $sql = \" SELECT id, nomeImg, nomeThumb FROM imagens WHERE  menu_id = \" . $_REQUEST['menu_id'] . \" and relacionamento_id = \" . $idInsert ;");
            sb.Append(Environment.NewLine);
			sb.Append("	            $this->rs = $this->objDb->Execute($sql);");
            sb.Append(Environment.NewLine);
			sb.Append("             $obj = array();	");
            sb.Append(Environment.NewLine);
			sb.Append("             if (!$this->rs->EOF) {");
            sb.Append(Environment.NewLine);
			sb.Append("                 $obj['nomeImg']	= $this->rs->fields['nomeImg'];");
            sb.Append(Environment.NewLine);
			sb.Append("                 $obj['nomeThumb']	= $this->rs->fields['nomeThumb'];");
            sb.Append(Environment.NewLine);
			sb.Append("                 $obj['id']			= $this->rs->fields['id'];");
            sb.Append(Environment.NewLine);
			sb.Append("                 //Deleta arquivos");
            sb.Append(Environment.NewLine);
			sb.Append("                 @unlink($this->diretorio_g . $obj['nomeImg']);");
            sb.Append(Environment.NewLine);
			sb.Append("                 @unlink($this->diretorio_p . $obj['nomeThumb']);");
            sb.Append(Environment.NewLine);
			sb.Append("                 //Deleta no banco");
            sb.Append(Environment.NewLine);
			sb.Append("                 $sql = \"DELETE FROM imagens WHERE id = \" . $obj['id'];");
            sb.Append(Environment.NewLine);
			sb.Append("                 if (!$this->objDb->Execute($sql)) {");
            sb.Append(Environment.NewLine);
			sb.Append("                     $dbRetorno = false;");
            sb.Append(Environment.NewLine);
			sb.Append("                 }");
            sb.Append(Environment.NewLine);
			sb.Append("             }");
            sb.Append(Environment.NewLine);
			sb.Append("             $imgRetorno = $upload->enviarArquivo($_FILES[\"img\"], $this->diretorio, $this->diretorio_g, $this->diretorio_p, $this->width_img, $this->height_img, $this->width_thumb, $this->height_thumb);");
            sb.Append(Environment.NewLine);
			sb.Append("             $img = explode(\"|\", $imgRetorno);");
            sb.Append(Environment.NewLine);
			sb.Append("             $sql = \" INSERT INTO imagens(menu_id, relacionamento_id, titulo, nomeImg, nomeThumb, destaque) \";");
            sb.Append(Environment.NewLine);
			sb.Append("             $sql.= \" VALUES(\" . $_REQUEST['menu_id'] . \",\" . $_REQUEST['id'] . \",\";		");
            sb.Append(Environment.NewLine);
			sb.Append("             $sql.= \" NULL,'\" . $img[0] . \"','\" . $img[1] . \"', 1)\";");
            sb.Append(Environment.NewLine);
			sb.Append("             if (!$this->objDb->Execute($sql)) {");
            sb.Append(Environment.NewLine);
			sb.Append("                 $dbRetorno = false;");
            sb.Append(Environment.NewLine);
			sb.Append("                 //Deleta arquivos");
            sb.Append(Environment.NewLine);
			sb.Append("                 @unlink($this->diretorio_g . $img[0]);");
            sb.Append(Environment.NewLine);
			sb.Append("                 @unlink($this->diretorio_p . $img[1]);");
            sb.Append(Environment.NewLine);
			sb.Append("                 exit('<pre>ERRO AO INSERIR IMG' . $sql);");
            sb.Append(Environment.NewLine);
			sb.Append("             }");
            sb.Append(Environment.NewLine);
			sb.Append("     }");
            sb.Append(Environment.NewLine); 
            sb.Append(Environment.NewLine);
            sb.Append("     if (!$this->objDb->Execute($sql)) {");
            sb.Append(Environment.NewLine);
            sb.Append("             $dbRetorno = false;");
            sb.Append(Environment.NewLine);
            sb.Append("     }");
            sb.Append(Environment.NewLine);
            sb.Append("		");
            sb.Append(Environment.NewLine);
            sb.Append("     return $dbRetorno;");
            sb.Append(Environment.NewLine);
            sb.Append("}");
            sb.Append(Environment.NewLine);

            
            
            sb.Append(@"//#######################################################################");
            sb.Append(Environment.NewLine);
            sb.Append(@"//	   Verifica se o registro já existe pela chave ignorando o ID   #");
            sb.Append(Environment.NewLine);
            sb.Append(@"//####################################################################### ");

            sb.Append(RetornaFuncaoExiste(tabela));
            	
	      


            sb.Append(@"//#######################################################################");
            sb.Append(Environment.NewLine);
            sb.Append(@"//							  ALTERAR									#");
            sb.Append(Environment.NewLine);
            sb.Append(@"//####################################################################### ");
            sb.Append(Environment.NewLine);
            sb.Append("public function edit(){");
            sb.Append(Environment.NewLine);
            sb.Append("     $dbRetorno = true;");
            sb.Append(Environment.NewLine);
            sb.Append("		");
            sb.Append(Environment.NewLine);
            sb.Append("     $sql = \" UPDATE ");
            sb.Append(tabela);
            sb.Append("     SET \";");            
            sb.Append(RetornaRequestUpdate(tabela));
            sb.Append("		");
            sb.Append(Environment.NewLine);
            sb.Append("     if (!$this->objDb->Execute($sql)) {");
            sb.Append(Environment.NewLine);
            sb.Append("         $dbRetorno = false;");
            sb.Append(Environment.NewLine);
            sb.Append("     }");
            sb.Append(Environment.NewLine);
            sb.Append("		");
            sb.Append(Environment.NewLine);
            sb.Append("     return $dbRetorno;		");
            sb.Append(Environment.NewLine);
            sb.Append("}");
            sb.Append(Environment.NewLine);


            sb.Append(@"//#######################################################################");
            sb.Append(Environment.NewLine);
            sb.Append(@"//							  DELETAR									#");
            sb.Append(Environment.NewLine);
            sb.Append(@"//#######################################################################	");
            sb.Append(Environment.NewLine);
            sb.Append(@"/**");
            sb.Append(Environment.NewLine);
            sb.Append("*");
            sb.Append(Environment.NewLine);
            sb.Append("* @return Bollean");
            sb.Append(Environment.NewLine);
            sb.Append("*/");
            sb.Append(Environment.NewLine);
            sb.Append("public function delete(){");
            sb.Append(Environment.NewLine);
            sb.Append("     $dbRetorno = true;");
            sb.Append(Environment.NewLine);
            sb.Append("		");
            sb.Append(Environment.NewLine);
            sb.Append("     $sql = \"DELETE FROM ");
            sb.Append(tabela);
            sb.Append("     WHERE id=\" . $_REQUEST['id'];");
            sb.Append(Environment.NewLine);
            sb.Append("		");
            sb.Append(Environment.NewLine);
            sb.Append("     if (!$this->objDb->Execute($sql)) {");
            sb.Append(Environment.NewLine);
            sb.Append("         $dbRetorno = false;");
            sb.Append(Environment.NewLine);
            sb.Append("     }");
            sb.Append(Environment.NewLine);
            sb.Append("		");
            sb.Append(Environment.NewLine);
            sb.Append("     return $dbRetorno;");
            sb.Append(Environment.NewLine);
            sb.Append("}");
            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);
            
            sb.Append(@"//#######################################################################");
            sb.Append(Environment.NewLine);
            sb.Append(@"//							  RETORNOS/COSULTAS							#");
            sb.Append(Environment.NewLine);
            sb.Append(@"//#######################################################################");
            sb.Append(Environment.NewLine);

            sb.Append("public function get");
            sb.Append(cultureinfo.TextInfo.ToTitleCase(tabela));
            sb.Append("($" + tabela + "_id){");
            sb.Append(Environment.NewLine);
            sb.Append("     $colecao = new Collection();");
            sb.Append(Environment.NewLine);
            sb.Append("		");
            sb.Append(Environment.NewLine);
            sb.Append("     $sql = \" SELECT ");
            sb.Append(RetornaCamposTabela(tabela));           
            sb.Append("\";");
            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);
            sb.Append("     $sql .= \" FROM ");
            sb.Append(tabela);
            sb.Append("\";");
            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);
            sb.Append("     if($"+tabela+"_id ==''){");
            sb.Append(Environment.NewLine);
		    sb.Append("         $sql.= \" WHERE 1=1\";");
            sb.Append(Environment.NewLine);
	        sb.Append("     }");
            sb.Append(Environment.NewLine);
	        sb.Append("     else{");
            sb.Append(Environment.NewLine);
            sb.Append("         $sql.= \" WHERE id  = \" . $" + tabela + "_id;");
            sb.Append(Environment.NewLine);
	        sb.Append("     }");

            sb.Append(Environment.NewLine);
            sb.Append(RetornaRequestFiltro(tabela));

            sb.Append("     if($" + tabela + "_id ==''){");
                sb.Append(Environment.NewLine);
                sb.Append("     $this->rs = $this->objDb->Execute($sql);");
                sb.Append(Environment.NewLine);
                sb.Append("     while (!$this->rs->EOF) {");
                //sb.Append(Environment.NewLine);
               // sb.Append("             $obj = array();");
                sb.Append(Environment.NewLine);
                sb.Append(Environment.NewLine);
                sb.Append(RetornaCamposObjeto(tabela));
                sb.Append(Environment.NewLine);
                sb.Append("			");
                sb.Append(Environment.NewLine);
                sb.Append("             $colecao->Add($obj);");
                sb.Append(Environment.NewLine);
                sb.Append("			");
                sb.Append(Environment.NewLine);
                sb.Append("     $this->rs->MoveNext();");
                sb.Append(Environment.NewLine);
                sb.Append("     }");
                sb.Append(Environment.NewLine);
                sb.Append(" return $colecao;");
                sb.Append(Environment.NewLine);
                sb.Append("}	");
                sb.Append(Environment.NewLine);
             

             sb.Append(Environment.NewLine);
             sb.Append("    else{");

                sb.Append(Environment.NewLine);
                sb.Append("     $this->rs = $this->objDb->Execute($sql);");
                sb.Append(Environment.NewLine);
                sb.Append("     if (!$this->rs->EOF) {");            
                sb.Append(Environment.NewLine);
                sb.Append("         $obj = array();");
                sb.Append(Environment.NewLine);          
                sb.Append(Environment.NewLine);
                sb.Append(RetornaCamposObjeto(tabela));
                sb.Append("         return $obj;");
                sb.Append(Environment.NewLine);
                sb.Append("     }");                
                sb.Append(Environment.NewLine);
                sb.Append("}	");
                sb.Append(Environment.NewLine);
             sb.Append("}	");
             sb.Append(Environment.NewLine);
            
            sb.Append(@"//###############################################################################");
            sb.Append(Environment.NewLine);
            sb.Append(@"//									COMBO										#");
            sb.Append(Environment.NewLine);
            sb.Append(@"//###############################################################################");
            sb.Append(Environment.NewLine);

            sb.Append("public function getCombo"+ cultureinfo.TextInfo.ToTitleCase(tabela) +"( $");
            sb.Append(tabela);
            sb.Append("_id ){");
            sb.Append(Environment.NewLine);
            sb.Append("     $objCombo = new UtilCombo();");
            sb.Append(Environment.NewLine);
            sb.Append("		");
            sb.Append(Environment.NewLine);
            sb.Append("     $objCombo->SETObjDb( $this->objDb );");
            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);

            sb.Append("     $sql = \"SELECT ");
           
            sb.Append(RetornaCamposTabelaCombo(tabela));           
            sb.Append("		");
            sb.Append(Environment.NewLine);                      
            sb.Append(Environment.NewLine);
            sb.Append("}");

            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);
            sb.Append("//###############################################################################");
            sb.AppendLine();
            sb.Append("//								FINALIZADOR										#");
            sb.AppendLine();
            sb.Append("//###############################################################################");
            sb.Append(Environment.NewLine);
            sb.Append(Environment.NewLine);
            sb.Append(@"/**");
            sb.AppendLine();
            sb.Append("* Finalizador da classe.");
            sb.AppendLine();
            sb.Append("*");
            sb.AppendLine();
            sb.Append(@"*/");
            sb.AppendLine();
            sb.Append("public function fecharConn(){");
            sb.AppendLine();
            sb.Append("     $this->rs = null;");
            sb.Append(Environment.NewLine);
            sb.Append("     $this->objDb->Close();");
            sb.Append(Environment.NewLine);
            sb.Append("}	");
            sb.Append(Environment.NewLine);
            sb.Append("}");
            sb.Append(Environment.NewLine);
            sb.Append("?>");
            sb.Append(Environment.NewLine);


            resultado = sb.ToString();
            return resultado;
        }

        private string RetornaFuncaoExiste(string tabela)
        {
            StringBuilder sql = new StringBuilder();
            DataTable MyDT = new DataTable();
            StringBuilder retorno = new StringBuilder();
            StringBuilder str_auxiliar_parametro = new StringBuilder();
            StringBuilder str_auxiliar_where = new StringBuilder();
      
            sql.Append("describe ");
            sql.Append(tabela);

            MySqlDataAdapter myDA = new MySqlDataAdapter(sql.ToString(), bdConn);
            myDA.Fill(MyDT);
            myDA.Update(MyDT);
            ////dataGridView1.DataSource = MyDT;


            retorno.AppendLine();
            retorno.Append("public function  existe(");            

            foreach (DataRow row in MyDT.Rows)
            {
                // pega os valores por linha
                if (row.ItemArray[3].ToString() == "PRI")
                {
                    str_auxiliar_parametro.Append("$" + row.ItemArray[0]);
                    str_auxiliar_parametro.Append(",");
                }                
            }
            if (str_auxiliar_parametro.Length>0)
                retorno.Append(str_auxiliar_parametro.ToString().Substring(0, str_auxiliar_parametro.Length - 1));            
            
            retorno.Append("){");
            retorno.AppendLine();

            retorno.Append("$sql =\"SELECT 1\";");
            retorno.AppendLine();
            retorno.Append("$sql .= \" from " + tabela + "\";");
            retorno.AppendLine();
            retorno.Append("$sql .= \" WHERE ");

            foreach (DataRow row in MyDT.Rows)
            {
                // pega os valores por linha
                if (row.ItemArray[3].ToString() == "PRI")
                {
                    str_auxiliar_where.Append(row.ItemArray[0] + " =  \" . $" + row.ItemArray[0] + " . \" and ");                                        
                }
            }
            if (str_auxiliar_where.Length > 0)
                retorno.Append(str_auxiliar_where.ToString().Substring(0, str_auxiliar_where.Length - 8));
            retorno.Append(";");
            retorno.AppendLine();

            retorno.Append("//exit($sql);");
            retorno.AppendLine();
            retorno.Append("$this->rs = $this->objDb->Execute($sql);");
            retorno.AppendLine();
            retorno.Append("$obj = array();");
            retorno.AppendLine();
            retorno.Append("if (!$this->rs->EOF) {		");
            retorno.AppendLine();
            retorno.Append("	return true;");
            retorno.AppendLine();
            retorno.Append("}");
            retorno.AppendLine();
            retorno.Append("return false;		");
            retorno.AppendLine();
            retorno.Append("}");
            retorno.AppendLine();

            if (str_auxiliar_parametro.Length>0)
            {
                if (str_auxiliar_parametro.ToString().Substring(0, str_auxiliar_parametro.Length - 1).IndexOf(",") != -1)
                {
                    // controle para saber se vai ser necessário criar no model e no ADD a função e verificação da existência do registro da tabela antes de inserir, para não inserir duplicado
                    // baseado nas chaves primárias da tabela
                    sts_verifica_registro_existente = true;
                    return retorno.ToString();
                }               
            }
            else
            {
                // controle para saber se vai ser necessário criar no model e no ADD a função e verificação da existência do registro da tabela antes de inserir, para não inserir duplicado
                // baseado nas chaves primárias da tabela
                sts_verifica_registro_existente = false;
                return retorno.ToString().Substring(retorno.Length, 0);
            }
            return retorno.ToString().Substring(retorno.Length, 0);
        }

        private string RetornaCamposRequestParametro(string tabela)
        {
            StringBuilder sql = new StringBuilder();
            DataTable MyDT = new DataTable();
            StringBuilder retorno = new StringBuilder();
            StringBuilder str_auxiliar_parametro = new StringBuilder();
            StringBuilder str_auxiliar_where = new StringBuilder();

            sql.Append("describe ");
            sql.Append(tabela);

            MySqlDataAdapter myDA = new MySqlDataAdapter(sql.ToString(), bdConn);
            myDA.Fill(MyDT);
            myDA.Update(MyDT);

            foreach (DataRow row in MyDT.Rows)
            {
                // pega os valores por linha
                if (row.ItemArray[3].ToString() == "PRI")
                {
                    str_auxiliar_parametro.Append("$_REQUEST['" + row.ItemArray[0] + "']");                    
                    str_auxiliar_parametro.Append(",");
                }
            }
            retorno.Append(str_auxiliar_parametro.ToString().Substring(0, str_auxiliar_parametro.Length - 1));
            return retorno.ToString();
            
        }

        private string RetornaCamposTabelaCombo(string tabela)
        {
            StringBuilder sql = new StringBuilder();
            DataTable MyDT = new DataTable();
            StringBuilder retorno = new StringBuilder();
            StringBuilder campos = new StringBuilder();
            string aux;
            int cont;
            sql.Append("describe ");
            sql.Append(tabela);

            MySqlDataAdapter myDA = new MySqlDataAdapter(sql.ToString(), bdConn);
            myDA.Fill(MyDT);
            myDA.Update(MyDT);
            ////dataGridView1.DataSource = MyDT;
            cont = 0;
            foreach (DataRow row in MyDT.Rows)
            {
                // pega os valores por linha
                if (cont < 2)
                {
                    retorno.Append(" " + row.ItemArray[0]);
                    campos.Append("'" + row.ItemArray[0] + "'");
                    if (MyDT.Rows.Count - cont != 1)
                    {
                        retorno.Append(",");
                        campos.Append(",");
                    }                  
                }
                cont++;
            }
            aux=retorno.ToString().Substring(0, retorno.ToString().Length - 1);
            retorno.Clear();
            retorno.Append(aux );
            retorno.Append(" FROM ");
            retorno.Append(tabela);
            retorno.Append("\";");
            retorno.Append(Environment.NewLine);
            retorno.Append("     $objCombo->SETQuery( $sql );");
            retorno.Append(Environment.NewLine);
            retorno.Append(" return $objCombo->getComboOptions( " + campos.ToString().Substring(0,campos.ToString().Length -1) +", $"+tabela+"_id, false );");
            retorno.Append(Environment.NewLine);
            retorno.Append("     $objCombo = \"\";");

            return retorno.ToString();
        }

        private string RetornaRequestFiltro(string tabela)
        {
            StringBuilder sql = new StringBuilder();
            DataTable MyDT = new DataTable();
            StringBuilder retorno = new StringBuilder();
            int cont;

            sql.Append("describe ");
            sql.Append(tabela);

            MySqlDataAdapter myDA = new MySqlDataAdapter(sql.ToString(), bdConn);
            myDA.Fill(MyDT);
            myDA.Update(MyDT);
            ////dataGridView1.DataSource = MyDT;
            cont = 0;

            retorno.Append(Environment.NewLine);
            // pega os valores coluna a coluna na linha
            foreach (DataRow row in MyDT.Rows)
            {
                // cont > 0  para pular a colun id autoincremento
                if (cont > 0)
                {
                    retorno.Append("     if ( $_REQUEST['" + row.ItemArray[0] + "'] != '') {");
                    retorno.Append(Environment.NewLine);
                    retorno.Append("        $sql.= \" AND " + row.ItemArray[0] + " LIKE '%\" . $_REQUEST['" + row.ItemArray[0] + "'] . \"%'\";");
                    retorno.Append(Environment.NewLine);
                    retorno.Append("     }");
                    retorno.Append(Environment.NewLine);
                }
                cont++;
            }            
            retorno.Append(Environment.NewLine);
            retorno.Append(Environment.NewLine);
            return retorno.ToString();    
        }
        
        private string RetornaCamposObjeto(string tabela)
        {           
            StringBuilder sql = new StringBuilder();
            DataTable MyDT = new DataTable();
            StringBuilder retorno = new StringBuilder();          

            sql.Append("describe ");
            sql.Append(tabela);

            MySqlDataAdapter myDA = new MySqlDataAdapter(sql.ToString(), bdConn);
            myDA.Fill(MyDT);
            myDA.Update(MyDT);
            ////dataGridView1.DataSource = MyDT;          

            retorno.Append(Environment.NewLine);
            // pega os valores coluna a coluna na linha
            foreach (DataRow row in MyDT.Rows)
            {
                retorno.Append("            $obj['" + row.ItemArray[0] + "']          = $this->rs->fields['" + row.ItemArray[0] + "'];");                 
                retorno.Append(Environment.NewLine);
             
            }
            return retorno.ToString();    
        }

        private string RetornaRequestUpdate(string tabela)
        {
            StringBuilder sql = new StringBuilder();
            DataTable MyDT = new DataTable();
            StringBuilder retorno = new StringBuilder();
            int cont;            

            sql.Append("describe ");
            sql.Append(tabela);

            MySqlDataAdapter myDA = new MySqlDataAdapter(sql.ToString(), bdConn);
            myDA.Fill(MyDT);
            myDA.Update(MyDT);
            ////dataGridView1.DataSource = MyDT;
            cont = 0;

            retorno.Append(Environment.NewLine);            
            // pega os valores coluna a coluna na linha
            foreach (DataRow row in MyDT.Rows)
            {   
                // cont > 0  para pular a colun id autoincremento
                if (cont>0)
                {
                    if (cont==1)
                        retorno.Append("     $sql.= \" " + row.ItemArray[0] + "      = '\" . $_REQUEST['" + row.ItemArray[0] + "'] . \"'\";");     
                    else
                        retorno.Append("     $sql.= \", " + row.ItemArray[0] + "     = '\" . $_REQUEST['" + row.ItemArray[0] + "'] . \"'\";");     

                   retorno.Append(Environment.NewLine);                   
                }  
                cont++;
            }    
            retorno.Append("     $sql.= \" WHERE id       = \" . $_REQUEST['id'];");
            retorno.Append(Environment.NewLine);
            retorno.Append(Environment.NewLine);
            return retorno.ToString();    
        }

        private DataTable RetornaTipoCamposTabela(string tabela)
        {
            StringBuilder sql = new StringBuilder();
            DataTable MyDT = new DataTable();
            StringBuilder retorno = new StringBuilder();

            sql.Append("describe ");
            sql.Append(tabela);

            MySqlDataAdapter myDA = new MySqlDataAdapter(sql.ToString(), bdConn);
            myDA.Fill(MyDT);
            myDA.Update(MyDT);
            ////dataGridView1.DataSource = MyDT;
            return MyDT;

        }

        private string RetornaCamposTabela(string tabela)
        {
            StringBuilder sql = new StringBuilder();
            DataTable MyDT = new DataTable();
            StringBuilder retorno = new StringBuilder();
            int cont;
            sql.Append("describe ");
            sql.Append(tabela);

            MySqlDataAdapter myDA = new MySqlDataAdapter(sql.ToString(), bdConn);
            myDA.Fill(MyDT);
            myDA.Update(MyDT);
            //dataGridView1.DataSource = MyDT;
            cont=0;
            foreach (DataRow row in MyDT.Rows)
            {   
                // pega os valores por linha
               // if (cont>0)
              //  {
                    retorno.Append(" "+row.ItemArray[0]);
                    if (MyDT.Rows.Count	- cont != 1)
                    {
                        retorno.Append(",");    
                    }                    

                    if (cont % 5 == 0)
                    {
                        retorno.Append("\";");
                        retorno.Append(Environment.NewLine);
                        retorno.Append("     $sql.= \"");

                    } 
              //  }       
                cont++;
            }           
            return retorno.ToString();

        }

        private string RetornaCamposTabelaInsert(string tabela)
        {
            StringBuilder sql = new StringBuilder();
            DataTable MyDT = new DataTable();
            StringBuilder retorno = new StringBuilder();
            int cont;
            sql.Append("describe ");
            sql.Append(tabela);

            MySqlDataAdapter myDA = new MySqlDataAdapter(sql.ToString(), bdConn);
            myDA.Fill(MyDT);
            myDA.Update(MyDT);
            //dataGridView1.DataSource = MyDT;
            cont = 0;
            foreach (DataRow row in MyDT.Rows)
            {
                // pega os valores por linha
                if (cont>0)
                {
                    retorno.Append(" " + row.ItemArray[0]);
                    if (MyDT.Rows.Count - cont != 1)
                    {
                        retorno.Append(",");
                    }

                    if (cont % 5 == 0)
                    {
                        retorno.Append("\";");
                        retorno.Append(Environment.NewLine);
                        retorno.Append("     $sql.= \"");

                    }
                }                
                cont++;
            }           
            return retorno.ToString();

        }

        private string RetornaCamposRequestADD(string tabela)
        {
            StringBuilder sql = new StringBuilder();
            DataTable MyDT = new DataTable();
            StringBuilder retorno = new StringBuilder();
            int cont;            

            sql.Append("describe ");
            sql.Append(tabela);

            MySqlDataAdapter myDA = new MySqlDataAdapter(sql.ToString(), bdConn);
            myDA.Fill(MyDT);
            myDA.Update(MyDT);
            //dataGridView1.DataSource = MyDT;
            cont = 0;

            retorno.Append("     $sql.= \" VALUES(\";");            
            retorno.Append(Environment.NewLine);            
            // pega os valores coluna a coluna na linha
            foreach (DataRow row in MyDT.Rows)
            {   
                // cont > 0  para pular a colun id autoincremento
                if (cont>0)
                {   
                    // verifica se o valor é obrigatório
                    if (row[2].ToString().IndexOf("NO") != -1)
                    {
                        if ((row[1].ToString().IndexOf("char") != -1) || (row[1].ToString().IndexOf("text") != -1) || (row[1].ToString().IndexOf("date") != -1))
                        {
                            retorno.Append("     $sql.= \"");
                            retorno.Append(" '\" . $_REQUEST['");
                            retorno.Append(row.ItemArray[0]);
                            retorno.Append("'] . \"'\";");
                            retorno.Append(Environment.NewLine);
                        }
                        else
                        {
                            retorno.Append("     $sql.= ");
                            retorno.Append(" $_REQUEST['");
                            retorno.Append(row.ItemArray[0]);
                            retorno.Append("'] ;");
                            retorno.Append(Environment.NewLine);
                        }
                    }
                    else
                    {
                        if ((row[1].ToString().IndexOf("char") != -1) || (row[1].ToString().IndexOf("text") != -1) || (row[1].ToString().IndexOf("date") != -1))
                        {
                            retorno.Append("     if ($_REQUEST['");
                            retorno.Append(row.ItemArray[0]);
                            retorno.Append("'] <> \"\"){");
                            retorno.Append(Environment.NewLine);
	                        retorno.Append("        $sql .= \"'\" . ");
                            retorno.Append(" $_REQUEST['");
                            retorno.Append(row.ItemArray[0]);
                            retorno.Append("'] . \"'\";");
                            retorno.Append(Environment.NewLine);
                            retorno.Append("     }else{");
                            retorno.Append(Environment.NewLine);
	                        retorno.Append("        $sql .= \"null\";");
                            retorno.Append(Environment.NewLine);
                            retorno.Append("     }");
                            retorno.Append(Environment.NewLine);
                        }
                        else
                        {
                            retorno.Append("     if ($_REQUEST['");
                            retorno.Append(row.ItemArray[0]);
                            retorno.Append("'] <> \"\"){");
                            retorno.Append(Environment.NewLine);
                            retorno.Append("        $sql .= ");
                            retorno.Append("$_REQUEST['");
                            retorno.Append(row.ItemArray[0]);
                            retorno.Append("'];");
                            retorno.Append(Environment.NewLine);
                            retorno.Append("     }else{");
                            retorno.Append(Environment.NewLine);
                            retorno.Append("        $sql .= \"null\";");
                            retorno.Append(Environment.NewLine);
                            retorno.Append("     }");
                            retorno.Append(Environment.NewLine);
                        }

                    }
                    retorno.Append("     $sql.= \",\"; ");
                    retorno.Append(Environment.NewLine);
                } 
                cont++;
            }           
            retorno.Remove(retorno.ToString().Length-14 , 11);  
            retorno.Append("    $sql.= \")\";");    
            
            return retorno.ToString();

        }      

        #endregion

        private void chk_todos_CheckedChanged(object sender, EventArgs e)
        {
            if (chk_todos.Checked)
            {
                for (int x = 0; x <= checkedListBox1.Items.Count - 1; x++)
                    checkedListBox1.SetItemChecked(x, true);
            }
            else
            {
                for (int x = 0; x <= checkedListBox1.Items.Count - 1; x++)
                    checkedListBox1.SetItemChecked(x, false);
            }
        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            Form1 formulario = new Form1();

            formulario.ShowDialog();
        }

        private void btn_conectar_Click(object sender, EventArgs e)
        {
            ValidarInformacoes();
            Conectar(txt_host.Text, txt_banco.Text, txt_usuario.Text, txt_senha.Text);
            groupBox2.Visible = true;    
        }

        private void button1_Click_2(object sender, EventArgs e)
        {
            Form1.ActiveForm.Close();
        }      
    }
}
